#include <malloc.h>
#include <time.h>
#include<stdio.h>
#include<stdlib.h>

/**** petite macro pour choisir le type des matrices et vecteurs (entiers, reels) ******/
// gcc -DTYPE_INT
#ifdef INT
typedef int T;
#else
#ifdef FLOAT
typedef float T;
#else
 #error "Need to give MACRO definition for element type : -DINT or -DFLOAT"
#endif
#endif
/***************************************************************************************/


#include "fonctions.c"



/*********** programme principal********************************/ 

int main(int argc, char *argv[])
{


	//declarations parametres
	// on precisera la taille des matrices en ligne de commande
	int dim=atoi(argv[1]);
	int f_compteur=atoi(argv[2]);
	int i,j;
	
	int valeurmax,valeurmin;
	
	T* u;
	T* v;
	 
	//pour le stockage COO des matrices creuses
	int **I; //tableau d'indices
	T* Values; //tableau de valeurs non nuls de la matrice
	
	
	//Allocation dynamique vecteur IA et J equivalent a une diagonale (coeff aléatoires)
	I=(int**)malloc(dim*sizeof(*I));
	Values=(T*)malloc(dim*sizeof(T));
	v=(T*)malloc(dim*sizeof(T));
	u=(T*)malloc(dim*sizeof(T));
	 
	valeurmax=100000;
	valeurmin=-100000; 
	
	for(i=0;i<dim;i++)
	{
		I[i]=(int*)malloc(2*sizeof(**I));
		I[i][0]=i;
		I[i][1]=i;
		Values[i]=(T)rand()*(valeurmax-valeurmin)+valeurmin;
		u[i]=(T)1;
	}  
	
	

	//appel fonction produit
	SPMV_COO(I,Values,u,v,dim,f_compteur);


	/**************liberation memoire***********************************************/
	//liberation en memoire de IA,J,Values,u et v
	for(i=0;i<dim-1;i++)
	{
		free(I[i]);
	}
	free(I);
	free(Values);
	free(u);
	free(v);
/****************************************************************************/

return 0;
}


